#ifndef PLAYERO_H
#define PLAYERO_H

#include <FifoLectura.h>
#include <Serializable.h>
#include <Logger.h>
#include <ColaMensaje.h>
#include <MsgCaja.h>
#include <MessageTxRx.h>

class Playero
{
public:
	Playero();
	~Playero();
	
	void joinChiefClientQueue();
	void createInstructionReceptor();
	void checkInAttQueue();
	std::string retrieveInstructions();
	bool shouldLeave(const std::string& instruction) const;
	bool hasToAssistClient(const std::string& instruction) const;
	void assistClient();
	void guardarCobro(const std::string& monto);
	void liberarRecursosCompartidos();
	
private:
	static const int FAIL_EXIT = -1;
	static const int RETREATE_EXIT = 1;
	
	FifoLectura m_ReceptorFifo;
	std::string m_ReceptorFifoPathName;
	bool m_ReceptorFifoAbierto;
	
	FifoEscritura m_ReceptorJefe;
	
	Logger* m_Log;
	
	MessageTxRx m_MessageTxRx;
	
	typedef struct surtidor
	{
		long mtype;
		unsigned int numeroSurtidor;
	} TSurtidor;
	static const long MTYPE_SURTIDOR = 1;
	
	ColaMensaje<TSurtidor> m_SurtidorAvailable;
	
	ColaMensaje<TPedidoCaja> m_ColaPedidosDeCaja;
	
	MemoriaCompartida<int> m_CantPlayerosAvailable;
	bool m_CantPlayerosAvailableIncremented;
	
	void abrirReceptorFifo();
	
	void incrementPlayerosAvailable();
	void initSurtidores();
};

#endif // PLAYERO_H
